package satk.beans.interfaces;

/**
 * Interfaz general para los beans que realizan una acción en la base de datos
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
public interface IntControlBeans<T> {

    /**
     * Metodo para registrar un elemento en la base de datos
     * @param e Objeto que se procesa
     * @return Respuesta del procedimiento
     */
    public String add(T e);

    /**
     * Metodo para actualizar la información de un elemento en la base de datos
     * @param o Objeto con los valores previos a la edición
     * @param n Objeto con los valores despues de la edición
     * @return Respuesta del procedimiento
     */
    public String edit(T o, T n);

    /**
     * Metodo para eliminar un elemento de la base de datos
     * @param e Objeto que se procesa
     * @return Respuesta del procedimiento
     */
    public String del(T e);

    /**
     * Metodo para obtener el codigo de resultado
     * de la operación
     * @return Codigo de resultado
     */
    public int getResultCode();

    /**
     * Obtiene el mensaje de respuesta de la operación
     * @return Mensaje texto de respuesta
     */
    public String getResultMessage();

    /**
     * Indica se a obtenido un resultado de la operación
     * @return TRUE: hay un resultado
     */
    public boolean isResult();

    /**
     * Obtiene la el nombre de las clases de estilos CSS para la resuesta
     * @return Clases de estilos CSS
     */
    public String getIconResult();

    /**
     * Obtiene el estado del mensaje de respuesta, es un
     * estilo CSS
     * @return Estilo CSS para el estado de la respuesta
     */
    public String getStateResult();

    // <editor-fold desc="Metodos de edición">
    /**
     * Metodo para comprobar si el elemento se encunetra en estado de edición
     * @param i Elemento a comprobar el estado de edición
     * @return TRUE: si se encuentra editando
     */
    public boolean isBeingEdited(Integer i);

    /**
     * Metodo para inciar la edicion del elemento
     * @param e Objeto que se edita
     * @return 
     */
    public String actionStartEdit(Integer e);

    /**
     * Metodo para cancelar la edicion del elemento
     * @param e Elemento en el que se cancela la edición
     * @return 
     */
    public String actionCancelEdit(Integer e);

    /**
     * Metodo para cancelar la edición de todos los elmentos activos
     * @return 
     */
    public String actionCancelEditAll();

    /**
     * Metodo para guardar los cambios realizados en el elemento
     * @param e Elemento del que se guardan los datos
     * @return 
     */
    public String actionSaveEdit(T e);

    /**
     * Metodo para guardar todos los cambios de todos los elementos que se
     * encuentran activos en la edición
     * @return 
     */
    public String actionSaveEditAll();
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Metodos de eliminación">
    /**
     * Metodo para comprobar si el elemento se encunetra en estado de eliminación
     * @param i Elemento a comprobar el estado de eliminación
     * @return TRUE: si se encuentra eliminado
     */
    public boolean isBeginRemove(Integer e);
    
    /**
     * Metodo para iniciar el proceso de eliminar un registro
     * @param e Objeto que se elimina
     * @return 
     */
    public String actionStartRemove(Integer e);

    /**
     * Metodo para cancelar el proceso de eliminado
     * @param e Elemento en el que se cancela el proceso
     * @return 
     */
    public String actionCancelRemove(Integer e);

    /**
     * Metodo para cancelar el proceso de eliminado de todos los elmentos activos
     * @return 
     */
    public String actionCancelRemoveAll();

    /**
     * Metodo para confirmar la eliminación del objeto
     * @param e Elemento que se eliminara
     * @return 
     */
    public String actionSaveRemove(T e);

    /**
     * Metodo para eliminar a todos los elementos preparados para su eliminación
     * @return 
     */
    public String actionSaveRemoveAll();
    // </editor-fold>
}
